package com.mazaiting.blog.controller

import com.mazaiting.blog.domain.Article
import com.mazaiting.blog.domain.Response
import com.mazaiting.blog.service.ArticleService
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.*

/**
 * 文章相关控制器
 */
@RestController
@RequestMapping("article")
class ArticleController {
    /**日志框架*/
    val logger = LoggerFactory.getLogger(javaClass)!!

    /**
     * 文章服务
     */
    @Autowired
    lateinit var service: ArticleService

    // 已使用
    /**
     * 获取文章分类
     * @param author 作者
     * @return 返回分类列表
     */
    @RequestMapping("/{author}", method = [RequestMethod.GET])
    fun articleCategory(@PathVariable author: String): Response {
        // 获取相对路径
//        logger.info(javaClass.classLoader.getResource("../resources/blog/test.txt").path)
        val list = service.articleList(author)
        return Response(1, list)
    }

    // 已使用
    /**
     * 请求文章列表
     * 匹配以/articleList/开头的所有内容
     * @param author 作者
     * @param category 文章分类
     * @return 文章列表
     */
    @RequestMapping("/{author}/{category}", method = [RequestMethod.GET])
    fun articleListForPath(@PathVariable author: String, @PathVariable category: String): Response {
        // 截取请求路径
//        val requestPath = request.requestURI.substring(13, request.requestURI.length)
//        logger.warn("$author $category")
        val list = service.articleList(author, category)
//        logger.info(list.toString())
        return Response(1, list)
    }

    // 已使用
    /**
     * 获取文件内容 : author 作者;category 分类; fileName 文件名
     */
    @PostMapping("/fileContent")
    fun getFileContent(@RequestBody map:Map<String, String>): Response {
//        logger.warn("$author  $category $fileName")
        val article = service.readFile(map["author"].toString(), map["category"].toString(), map["fileName"].toString())
//        logger.warn(string)
        return if (null != article) Response(1, article)
        else Response(0, "文件内容为空")
    }

    /**
     * 创建分类/文章 : author 作者;category 分类; fileName 文件名
     */
    @PostMapping("/create")
    fun create(@RequestBody map: Map<String, String>): Response {
//        logger.info(map.toString())
        // 创建文件夹 / 文件
        val msg = service.create(map["author"].toString(), map["category"].toString(), map["fileName"].toString())
        // 返回消息体
        return if (msg == ArticleService.ARTICLE_VALID) Response(0, "创建成功")
            else Response(-1, msg)
    }

    /**
     * 保存文件内容.
     * author 作者;category 分类; fileName 文件名;
     * content 内容
     */
    @PostMapping("/update")
    fun update(@RequestBody map: Map<String, String>): Response {
        logger.info(map.toString())
        val msg = service.update(map["author"].toString(), map["category"].toString(), map["fileName"].toString(),
                map["content"].toString())
        return if (msg === "存储成功") Response(0, "保存成功")
            else Response(-1, msg)
    }
}